﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;

namespace GSync
{
    public class BitMask
    {
        byte[] internalData;
        public BitMask(int capacity)
        {
            int[] i = new int[12];
            internalData = new byte[capacity / 8 + 1];
        }

        public bool this[int index]
        {
            get
            {
                byte page = internalData[index / 8];
                int indexOnPage = index - index / 8 - 1;
                byte pageMask = (byte)Math.Pow(2, indexOnPage);
                return (page & pageMask) != 0;
            }
            set
            {
                byte page = internalData[index / 8];
                int indexOnPage = index - index / 8 - 1;
                byte pageMask;
                if (value)
                {
                    pageMask = (byte)Math.Pow(2, indexOnPage);
                    page = (byte)(page | pageMask);
                }
                else
                {
                    pageMask = (byte)(255 ^ (int)Math.Pow(2, indexOnPage));
                    page = (byte)(page & pageMask);
                }
                internalData[index / 8] = page;

            }
        }
    }
}
